iT邦幫忙

2024 iThome 鐵人賽

DAY 10
0

今天我們要來了解OAuth是甚麼東西?

OAuth

根據wiki的解釋
開放授權(OAuth)是一個開放標準,允許使用者讓第三方應用訪問該使用者在某一網站上儲存的私密的資源(如相片,影片,聯絡人列表),而無需將使用者名稱和密碼提供給第三方應用。

OAuth允許使用者提供一個權杖,而不是使用者名稱和密碼來訪問他們存放在特定服務提供者的資料。每一個權杖授權一個特定的網站(例如,影片編輯網站)在特定的時段(例如,接下來的2小時內)內訪問特定的資源(例如僅僅是某一相簿中的影片)。這樣,OAuth讓使用者可以授權第三方網站訪問他們儲存在另外服務提供者的某些特定資訊,而非所有內容。

https://zh.wikipedia.org/zh-tw/%E5%BC%80%E6%94%BE%E6%8E%88%E6%9D%83

核心概念

  1. 資源擁有者(Resource Owner)
    • 通常是user,擁有Resource Server上的資源,例如用戶的雲端檔案
  2. 客戶端(Client)
    • 需要訪問資源擁有者資源的應用程序或服務。
  3. 授權伺服器(Authorization Server)
    • 負責身份驗證並頒發授權碼和訪問token。授權伺服器確保客戶端在授權用戶後,能夠安全地取得訪問token。
  4. 資源伺服器 (Resource Server)
    • 存儲用戶資源的伺服器。Resource Server驗證訪問token的有效性,並根據token授權用戶訪問其資源。

Authorization Code Grant

https://ithelp.ithome.com.tw/upload/images/20240923/20129702t060CNK9Oh.png
圖片取自:https://www.technice.com.tw/experience/12520/

假設我們要下載一個雲端上面的檔案,進到app後,它會將我們導到Authorization Server,身分認證成功後,經過Resource Owner同意後,就會將使用者轉導回去原本的app,並且帶上Authorization Grant,接著app就可以使用Authorization Grant向Autheriztion Server換取Access token,最後app就可以用access token來跟resource server溝通啦,我們要的檔案就可以下載下來了。

這樣的流程可以發現,app並沒有做身分認證,而是交給第三方來認證,授權的部分在做在我們的app就好,就可以讓授權和身分認證在不同的地方,減少了憑證暴露的風險,例如輸入到這個app的帳密會被駭客偷走,那麼透過第三方認證,就可以防止app獲得用戶的敏感憑證。

並且我們可以透過限制token的ttl,來讓我們使用上更加的安全,也可以refresh token來管理有效期,不需要讓user重新提供憑證。0

Implicit Grant

https://ithelp.ithome.com.tw/upload/images/20240923/20129702ZtIuzAxulk.png
圖片取自:https://www.technice.com.tw/experience/12520/

Implicit Grant適合Client-side applications的類型,通常會是整個應用程式都在前端運行,依需求向後端 API 取得資料。例如單純的靜態網站或 Single Page Application(SPA) 都適用。這些應用不會安全存儲客戶端密鑰,相對比較不安全。

它跟Authorization Code Grant相比少了一步驟,它會從Authorization Server得到access token,客戶端無需額外的請求來交換access token。這樣做的好處是加快了token的取得,但相對的這個token被帶在Authorization Server返回的url當中,這樣可能會有暴露的風險。

總結

今天我們學會了兩種OAuth2.0的用法,明天要繼續來驗證之路XD

reference

https://zh.wikipedia.org/zh-tw/%E5%BC%80%E6%94%BE%E6%8E%88%E6%9D%83
https://www.technice.com.tw/experience/12520/


上一篇
Day 9 Authentication - JWT
下一篇
Day 11 Authentication - Basic Authentication
系列文
Backend Developer的學習Roadmap30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言